from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants, levenshtein, distance_and_ok from django.conf import settings # from .models import Slider # Uncomment for Slider Task (https://github.com/chkgk/slider_task) # from slider_task.pages import SliderTaskPage # Uncomment for Slider Task (https://github.com/chkgk/slider_task) class P1_Instructions(Page): def is_displayed(self): return self.round_number == 1 # Uncomment for Slider Task (https://github.com/chkgk/slider_task) # class P2a_Slider_Task(SliderTaskPage): # Constants = Constants # Slider = Slider class P2a_Slider_Task_High(Page): form_model = 'player' form_fields = Constants.slider_list_high def is_displayed(self): return self.player.id_in_group == 1 and self.round_number == 1 def error_message(self, value): for field in P2a_Slider_Task_High.form_fields: print(field) if value[field] != 50: return 'Not all sliders are set to 50 yet!' class P2a_Slider_Task_Low(Page): form_model = 'player' form_fields = Constants.slider_list_low def is_displayed(self): return self.player.id_in_group == 2 and self.round_number == 1 def error_message(self, value): for field in P2a_Slider_Task_Low.form_fields: print(field) if value[field] != 50: return 'Not all sliders are set to 50 yet!' class P2b_Real_Effort_Task(Page): form_model = 'player' form_fields = ['transcribed_text'] def vars_for_template(self): return { 'image_path': 'house_money_effect/paragraphs/{}.png'.format( self.round_number), 'reference_text': Constants.reference_texts[self.round_number - 1], 'debug': settings.DEBUG, 'required_accuracy': 100 * (1 - Constants.allowed_error_rates[self.round_number - 1]) } def transcribed_text_error_message(self, transcribed_text): reference_text = Constants.reference_texts[self.round_number - 1] allowed_error_rate = Constants.allowed_error_rates[ self.round_number - 1] distance, ok = distance_and_ok(transcribed_text, reference_text, allowed_error_rate) if ok: self.player.levenshtein_distance = distance else: if allowed_error_rate == 0: return "The transcription should be exactly the same as on the image." else: return "This transcription appears to contain too many errors." def before_next_page(self): self.player.payoff_dictator_game = 0 self.player.payoff_public_goods_game = 0 class P3a_Dictator_Game(Page): form_model = 'group' form_fields = ['donation'] def is_displayed(self): return self.player.id_in_group == 1 and self.round_number == Constants.num_rounds class P3b_Public_Goods_Game(Page): form_model = 'player' form_fields = ['contribution'] def is_displayed(self): return self.round_number == Constants.num_rounds class P4_Beliefs(Page): form_model = 'player' form_fields = ['belief'] def is_displayed(self): return self.round_number == Constants.num_rounds class ResultsWaitPage(WaitPage): def is_displayed(self): return self.round_number == Constants.num_rounds def after_all_players_arrive(self): self.group.set_payoffs_public_goods_game() self.group.set_payoffs_beliefs() body_text = "Waiting for other participants." class P5a_CRT(Page): form_model = 'player' form_fields = ['crt_bat', 'crt_widget', 'crt_lake'] # 'crt_race', # 'crt_sheep', # 'crt_family', # 'crt_elves', # 'crt_mark', # 'crt_medals'] def is_displayed(self): return self.round_number == Constants.num_rounds def before_next_page(self): self.player.set_crt_payoff() class P5b_CRT_familiarity(Page): form_model = 'player' form_fields = ['crt_familiarity'] def is_displayed(self): return self.round_number == Constants.num_rounds class P6_Ravens_Test(Page): def is_displayed(self): return self.round_number == Constants.num_rounds class P7_Survey(Page): form_model = 'player' form_fields = ['age', 'gender', 'country', 'risk'] # 'education', def is_displayed(self): return self.round_number == Constants.num_rounds def before_next_page(self): self.player.set_payoffs_dictator_game() self.player.set_payoff() class P8_Results(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): table_rows = [] for prev_player in self.player.in_all_rounds(): row = { 'round_number': prev_player.round_number, 'reference_text_length': len(Constants.reference_texts[prev_player.round_number - 1]), 'transcribed_text_length': len(prev_player.transcribed_text), 'distance': prev_player.levenshtein_distance, } table_rows.append(row) return {'table_rows': table_rows, 'partner_contribution': self.player.get_partner().contribution, 'partner_role': self.player.get_partner().role(), 'partner_id': self.player.get_partner().id_in_group } page_sequence = [ P1_Instructions, P2a_Slider_Task_High, P2a_Slider_Task_Low, P2b_Real_Effort_Task, P3a_Dictator_Game, P3b_Public_Goods_Game, P4_Beliefs, ResultsWaitPage, P5a_CRT, P5b_CRT_familiarity, P6_Ravens_Test, P7_Survey, P8_Results ]